package br.com.comprasPublicas.entity;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.NamedNativeQueries;
import org.hibernate.annotations.NamedNativeQuery;


/**
 *
 * @author helsen_rafael
 * @since 11/01/11
 */
@Entity
@NamedNativeQueries({
    @NamedNativeQuery(name="order_by_id_sec", query="select * from secao ORDER BY id_secao",resultClass=Secao.class),
    @NamedNativeQuery(name="order_by_sec", query="select * from secao ORDER BY secao",resultClass=Secao.class),
    @NamedNativeQuery(name="select_max_id_sec", query="select * from secao",resultClass=Secao.class),
    @NamedNativeQuery(name="executa_consulta_departamento", query="select * from departamento",resultClass=Departamento.class)
})
        @NamedQuery(name="executa", query="from Departamento where id_departamento=:id")

public class Secao implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id_secao;
    
    @Column(name="secao", length=60)
    private String secao;
    
    @Column(name="chefe", length=40)
    private String chefe;

    @Column(name="ativo_secao", length=1)
    private String ativo_secao;//s=sim; n=não

    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="id_departamento", updatable=true, insertable=true, referencedColumnName="id_departamento")
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.SAVE_UPDATE)
    private Departamento departamento;

    @OneToMany(mappedBy="secao", fetch = FetchType.LAZY)
    @Cascade(CascadeType.ALL)
    private Collection<Pedido> pedido;

    @Cascade(CascadeType.ALL)

    /**
     * @return the id_secao
     */
    public int getId_secao() {
        return id_secao;
    }

    /**
     * @param id_secao the id_secao to set
     */
    public void setId_secao(int id_secao) {
        this.id_secao = id_secao;
    }

    /**
     * @return the secao
     */
    public String getSecao() {
        return secao;
    }

    /**
     * @param secao the secao to set
     */
    public void setSecao(String secao) {
        this.secao = secao;
    }

    /**
     * @return the chefe
     */
    public String getChefe() {
        return chefe;
    }

    /**
     * @param chefe the chefe to set
     */
    public void setChefe(String chefe) {
        this.chefe = chefe;
    }

    /**
     * @return the departamento
     */
    public Departamento getDepartamento() {
        return departamento;
    }

    /**
     * @param departamento the departamento to set
     */
    public void setDepartamento(Departamento departamento) {
        this.departamento = departamento;
    }

    /**
     * @return the ativo_secao
     */
    public String getAtivo_secao() {
        return ativo_secao;
    }

    /**
     * @param ativo_secao the ativo_secao to set
     */
    public void setAtivo_secao(String ativo_secao) {
        this.ativo_secao = ativo_secao;
    }

    /**
     * @return the pedido
     */
    public Collection<Pedido> getPedido() {
        return pedido;
    }

    /**
     * @param pedido the pedido to set
     */
    public void setPedido(Collection<Pedido> pedido) {
        this.pedido = pedido;
    }

}
